home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / bits / fcntl.h < prev    next >
C/C++ Source or Header  |  2009-10-07  |  10KB  |  271 lines

  1. /* O_*, F_*, FD_* bit values for Linux/x86-64.
  2.    Copyright (C) 2001, 2002, 2004, 2006, 2007 Free Software Foundation, Inc.
  3.    This file is part of the GNU C Library.
  4.  
  5.    The GNU C Library is free software; you can redistribute it and/or
  6.    modify it under the terms of the GNU Lesser General Public
  7.    License as published by the Free Software Foundation; either
  8.    version 2.1 of the License, or (at your option) any later version.
  9.  
  10.    The GNU C Library is distributed in the hope that it will be useful,
  11.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.    Lesser General Public License for more details.
  14.  
  15.    You should have received a copy of the GNU Lesser General Public
  16.    License along with the GNU C Library; if not, write to the Free
  17.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  18.    02111-1307 USA.  */
  19.  
  20. #ifndef    _FCNTL_H
  21. # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
  22. #endif
  23.  
  24. #include <sys/types.h>
  25. #include <bits/wordsize.h>
  26. #ifdef __USE_GNU
  27. # include <bits/uio.h>
  28. #endif
  29.  
  30.  
  31. /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
  32.    located on an ext2 file system */
  33. #define O_ACCMODE       0003
  34. #define O_RDONLY         00
  35. #define O_WRONLY         01
  36. #define O_RDWR             02
  37. #define O_CREAT           0100    /* not fcntl */
  38. #define O_EXCL           0200    /* not fcntl */
  39. #define O_NOCTTY       0400    /* not fcntl */
  40. #define O_TRUNC          01000    /* not fcntl */
  41. #define O_APPEND      02000
  42. #define O_NONBLOCK      04000
  43. #define O_NDELAY    O_NONBLOCK
  44. #define O_SYNC         010000
  45. #define O_FSYNC         O_SYNC
  46. #define O_ASYNC         020000
  47.  
  48. #ifdef __USE_GNU
  49. # define O_DIRECT     040000    /* Direct disk access.    */
  50. # define O_DIRECTORY    0200000    /* Must be a directory.     */
  51. # define O_NOFOLLOW    0400000    /* Do not follow links.     */
  52. # define O_NOATIME     01000000 /* Do not set atime.  */
  53. # define O_CLOEXEC     02000000 /* Set close_on_exec.  */
  54. #endif
  55.  
  56. /* For now Linux has synchronisity options for data and read operations.
  57.    We define the symbols here but let them do the same as O_SYNC since
  58.    this is a superset.    */
  59. #if defined __USE_POSIX199309 || defined __USE_UNIX98
  60. # define O_DSYNC    O_SYNC    /* Synchronize data.  */
  61. # define O_RSYNC    O_SYNC    /* Synchronize read operations.     */
  62. #endif
  63.  
  64. #ifdef __USE_LARGEFILE64
  65. # if __WORDSIZE == 64
  66. #  define O_LARGEFILE    0
  67. # else
  68. #  define O_LARGEFILE    0100000
  69. # endif
  70. #endif
  71.  
  72. /* Values for the second argument to `fcntl'.  */
  73. #define F_DUPFD        0    /* Duplicate file descriptor.  */
  74. #define F_GETFD        1    /* Get file descriptor flags.  */
  75. #define F_SETFD        2    /* Set file descriptor flags.  */
  76. #define F_GETFL        3    /* Get file status flags.  */
  77. #define F_SETFL        4    /* Set file status flags.  */
  78. #if __WORDSIZE == 64
  79. # define F_GETLK    5    /* Get record locking info.  */
  80. # define F_SETLK    6    /* Set record locking info (non-blocking).  */
  81. # define F_SETLKW    7    /* Set record locking info (blocking).    */
  82. /* Not necessary, we always have 64-bit offsets.  */
  83. # define F_GETLK64    5    /* Get record locking info.  */
  84. # define F_SETLK64    6    /* Set record locking info (non-blocking).  */
  85. # define F_SETLKW64    7    /* Set record locking info (blocking).    */
  86. #else
  87. # ifndef __USE_FILE_OFFSET64
  88. #  define F_GETLK    5    /* Get record locking info.  */
  89. #  define F_SETLK    6    /* Set record locking info (non-blocking).  */
  90. #  define F_SETLKW    7    /* Set record locking info (blocking).    */
  91. # else
  92. #  define F_GETLK    F_GETLK64  /* Get record locking info.    */
  93. #  define F_SETLK    F_SETLK64  /* Set record locking info (non-blocking).*/
  94. #  define F_SETLKW    F_SETLKW64 /* Set record locking info (blocking).  */
  95. # endif
  96. # define F_GETLK64    12    /* Get record locking info.  */
  97. # define F_SETLK64    13    /* Set record locking info (non-blocking).  */
  98. # define F_SETLKW64    14    /* Set record locking info (blocking).    */
  99. #endif
  100.  
  101. #if defined __USE_BSD || defined __USE_UNIX98
  102. # define F_SETOWN    8    /* Get owner of socket (receiver of SIGIO).  */
  103. # define F_GETOWN    9    /* Set owner of socket (receiver of SIGIO).  */
  104. #endif
  105.  
  106. #ifdef __USE_GNU
  107. # define F_SETSIG    10    /* Set number of signal to be sent.  */
  108. # define F_GETSIG    11    /* Get number of signal to be sent.  */
  109. #endif
  110.  
  111. #ifdef __USE_GNU
  112. # define F_SETLEASE    1024    /* Set a lease.     */
  113. # define F_GETLEASE    1025    /* Enquire what lease is active.  */
  114. # define F_NOTIFY    1026    /* Request notfications on a directory.     */
  115. # define F_DUPFD_CLOEXEC 1030    /* Duplicate file descriptor with
  116.                    close-on-exit set.  */
  117. #endif
  118.  
  119. /* For F_[GET|SET]FD.  */
  120. #define FD_CLOEXEC    1    /* actually anything with low bit set goes */
  121.  
  122. /* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
  123. #define F_RDLCK        0    /* Read lock.  */
  124. #define F_WRLCK        1    /* Write lock.    */
  125. #define F_UNLCK        2    /* Remove lock.     */
  126.  
  127. /* For old implementation of bsd flock().  */
  128. #define F_EXLCK        4    /* or 3 */
  129. #define F_SHLCK        8    /* or 4 */
  130.  
  131. #ifdef __USE_BSD
  132. /* Operations for bsd flock(), also used by the kernel implementation.    */
  133. # define LOCK_SH    1    /* shared lock */
  134. # define LOCK_EX    2    /* exclusive lock */
  135. # define LOCK_NB    4    /* or'd with one of the above to prevent
  136.                    blocking */
  137. # define LOCK_UN    8    /* remove lock */
  138. #endif
  139.  
  140. #ifdef __USE_GNU
  141. # define LOCK_MAND    32    /* This is a mandatory flock:    */
  142. # define LOCK_READ    64    /* ... which allows concurrent read operations.     */
  143. # define LOCK_WRITE    128    /* ... which allows concurrent write operations.  */
  144. # define LOCK_RW    192    /* ... Which allows concurrent read & write operations.     */
  145. #endif
  146.  
  147. #ifdef __USE_GNU
  148. /* Types of directory notifications that may be requested with F_NOTIFY.  */
  149. # define DN_ACCESS    0x00000001    /* File accessed.  */
  150. # define DN_MODIFY    0x00000002    /* File modified.  */
  151. # define DN_CREATE    0x00000004    /* File created.  */
  152. # define DN_DELETE    0x00000008    /* File removed.  */
  153. # define DN_RENAME    0x00000010    /* File renamed.  */
  154. # define DN_ATTRIB    0x00000020    /* File changed attibutes.  */
  155. # define DN_MULTISHOT    0x80000000    /* Don't remove notifier.  */
  156. #endif
  157.  
  158. struct flock
  159.   {
  160.     short int l_type;    /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.    */
  161.     short int l_whence;    /* Where `l_start' is relative to (like `lseek').  */
  162. #ifndef __USE_FILE_OFFSET64
  163.     __off_t l_start;    /* Offset where the lock begins.  */
  164.     __off_t l_len;    /* Size of the locked area; zero means until EOF.  */
  165. #else
  166.     __off64_t l_start;    /* Offset where the lock begins.  */
  167.     __off64_t l_len;    /* Size of the locked area; zero means until EOF.  */
  168. #endif
  169.     __pid_t l_pid;    /* Process holding the lock.  */
  170.   };
  171.  
  172. #ifdef __USE_LARGEFILE64
  173. struct flock64
  174.   {
  175.     short int l_type;    /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.    */
  176.     short int l_whence;    /* Where `l_start' is relative to (like `lseek').  */
  177.     __off64_t l_start;    /* Offset where the lock begins.  */
  178.     __off64_t l_len;    /* Size of the locked area; zero means until EOF.  */
  179.     __pid_t l_pid;    /* Process holding the lock.  */
  180.   };
  181. #endif
  182.  
  183. /* Define some more compatibility macros to be backward compatible with
  184.    BSD systems which did not managed to hide these kernel macros.  */
  185. #ifdef    __USE_BSD
  186. # define FAPPEND    O_APPEND
  187. # define FFSYNC        O_FSYNC
  188. # define FASYNC        O_ASYNC
  189. # define FNONBLOCK    O_NONBLOCK
  190. # define FNDELAY    O_NDELAY
  191. #endif /* Use BSD.  */
  192.  
  193. /* Advise to `posix_fadvise'.  */
  194. #ifdef __USE_XOPEN2K
  195. # define POSIX_FADV_NORMAL    0 /* No further special treatment.  */
  196. # define POSIX_FADV_RANDOM    1 /* Expect random page references.  */
  197. # define POSIX_FADV_SEQUENTIAL    2 /* Expect sequential page references.     */
  198. # define POSIX_FADV_WILLNEED    3 /* Will need these pages.  */
  199. # define POSIX_FADV_DONTNEED    4 /* Don't need these pages.  */
  200. # define POSIX_FADV_NOREUSE    5 /* Data will be accessed once.  */
  201. #endif
  202.  
  203.  
  204. #ifdef __USE_GNU
  205. /* Flags for SYNC_FILE_RANGE.  */
  206. # define SYNC_FILE_RANGE_WAIT_BEFORE    1 /* Wait upon writeout of all pages
  207.                          in the range before performing the
  208.                          write.  */
  209. # define SYNC_FILE_RANGE_WRITE        2 /* Initiate writeout of all those
  210.                          dirty pages in the range which are
  211.                          not presently under writeback.  */
  212. # define SYNC_FILE_RANGE_WAIT_AFTER    4 /* Wait upon writeout of all pages in
  213.                          the range after performing the
  214.                          write.  */
  215.  
  216. /* Flags for SPLICE and VMSPLICE.  */
  217. # define SPLICE_F_MOVE        1    /* Move pages instead of copying.  */
  218. # define SPLICE_F_NONBLOCK    2    /* Don't block on the pipe splicing
  219.                        (but we may still block on the fd
  220.                        we splice from/to).  */
  221. # define SPLICE_F_MORE        4    /* Expect more data.  */
  222. # define SPLICE_F_GIFT        8    /* Pages passed in are a gift.  */
  223. #endif
  224.  
  225. __BEGIN_DECLS
  226.  
  227. #ifdef __USE_GNU
  228.  
  229. /* Provide kernel hint to read ahead.  */
  230. extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
  231.     __THROW;
  232.  
  233.  
  234. /* Selective file content synch'ing.  */
  235. extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to,
  236.                 unsigned int __flags);
  237.  
  238.  
  239. /* Splice address range into a pipe.  */
  240. extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
  241.              size_t __count, unsigned int __flags);
  242.  
  243. /* Splice two files together.  */
  244. extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
  245.                __off64_t *__offout, size_t __len,
  246.                unsigned int __flags);
  247.  
  248. /* In-kernel implementation of tee for pipe buffers.  */
  249. extern ssize_t tee (int __fdin, int __fdout, size_t __len,
  250.             unsigned int __flags);
  251.  
  252. /* Reserve storage for the data of the file associated with FD.  */
  253. # ifndef __USE_FILE_OFFSET64
  254. extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len);
  255. # else
  256. #  ifdef __REDIRECT
  257. extern int __REDIRECT (fallocate, (int __fd, int __mode, __off_t __offset,
  258.                    __off_t __len),
  259.                fallocate64);
  260. #  else
  261. #   define fallocate fallocate64
  262. #  endif
  263. # endif
  264. # ifdef __USE_LARGEFILE64
  265. extern int fallocate64 (int __fd, int __mode, __off64_t __offset,
  266.             __off64_t __len);
  267. # endif
  268. #endif
  269.  
  270. __END_DECLS
  271.